public class Tipo
{
    public static int   PARAM = 1,
                        LOCAL = 2;

    public static int	ERRORD = -1,
                        ERRORI = -1,
                        ERROR = -1,
                        INT = 0,
                        DOUBLE = 1,
                        BOOLEAN = 2,
                        VOID = 3,
                        VECTOR = 4;

    static public String Tipos[] = {
        "entero",
        "real",
        "booleano",
        "void",
        "vector"};

    private String tipo; //Tipo de variable
    private Integer parametro; //Tipo de parámetro -1 si es void
    private Integer retorno; //Tipo de retorno
    private Integer tamanyo; //Tamaño en caso de ser un array
    private Integer tipoBase; //Columna a la que apunta


    /**
     * Crea un nuevo tipo de dato
     * @param tipo Nombre del tipo
     * @param parametro Indica el tipo de parámetro en caso de serlo
     * @param retorno Indica el valor de retorno si es una función
     * @param tamanyo Indica el tamaño del vector en caso de serlo
     * @param tipoBase  Tipo de dato al que apunta
     */

    public Tipo(String tipo, Integer parametro, Integer retorno, Integer tamanyo, Integer tipoBase)
    {
        this.tipo = tipo;
        this.parametro = parametro;
        this.retorno = retorno;
        this.tamanyo = tamanyo;
        this.tipoBase = tipoBase;
    }

    public Integer getParametro() {
        return parametro;
    }

    public Integer getRetorno() {
        return retorno;
    }

    public Integer getTamanyo() {
        return tamanyo;
    }

    public String getTipo() {
        return tipo;
    }

    public Integer getTipoBase() {
        return tipoBase;
    }

    public void setParametro(Integer parametro) {
        this.parametro = parametro;
    }

    public void setRetorno(Integer retorno) {
        this.retorno = retorno;
    }

    public void setTamanyo(Integer tamanyo) {
        this.tamanyo = tamanyo;
    }

    public void setTipo(String tipo) {
        this.tipo = tipo;
    }

    public void setTipoBase(Integer tipoBase) {
        this.tipoBase = tipoBase;
    }

    public Integer getTipo( String s )
    {
        if ( s.equals("entero") )
            return Tipo.INT;
        else if ( s.equals("real") )
            return Tipo.DOUBLE;
        else
            return Tipo.BOOLEAN;
    }

    /**
     * Comprueba si un tipo e vector
     * @return Cierte si es de tipo vector falso en caso contrario
     */
    public boolean esVector()
    {
        return tipo.equals(Tipos[VECTOR]);
    }
}
